package com.lanyam.travel.base.service;

import java.util.Date;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.lanyam.travel.base.entity.Product;
import com.lanyam.travel.base.entity.ScenicHotel;
import com.lanyam.travel.base.entity.TravelLine;
import com.lanyam.travel.base.entity.TravelOrder;
import com.lanyam.travel.base.entity.vo.TravelOrderVo;

import javax.servlet.http.HttpServletResponse;
import java.util.Map;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author rosson
 * @since 2020-01-27
 */
public interface ITravelOrderService {
	
	void addOrder(TravelOrder order);
	/**
	 * 从订单表中获取某次抢购活动中用户测购买次数
	 * @param panicBuyId 抢购活动id
	 * @param userId 用户id
	 * @return
	 */
	int queryPanicBuyCount(String panicBuyId, String userId);
	Map<String, Object> paywxr(HttpServletRequest request);
	/**
	 * 查询列表数据
	 */
	IPage<TravelOrderVo> getPageTravelOrder(Map<String, Object> queryMap, Integer page, Integer rows);

	/**
	 * 新增列表数据
	 */
	void addTravelOrder(TravelOrder travelOrder);

	/**
	 * 修改列表数据
	 */
	void delById(String id);

	/**
	 * 导出excel数据
	 * @param map
	 * @param response
	 */
	void exportExcel(Map<String, Object> map, HttpServletResponse response) throws Exception;

		/**
	 * 根据id获取订单
	 * @param orderId
	 * @return
	 */
	TravelOrderVo getOrderById(String orderId);
	/**
	 * 获取订单对应的景点/酒店/线路
	 * @param goodsId
	 * @return
	 */
	Product getProductByOrderId(String goodsId);
	/**
	 * 更新订单
	 * @param order
	 */
	void updateOrder(TravelOrder order);
	/**
	 * 删除订单
	 * @param orderId
	 */
	void deleteOrder(String orderId);
	/**
	 * 获取订单列表的分页数据
	 * @param pageNum
	 * @param pageSize
	 * @param userId
	 * @param reqMap
	 * @return
	 */
	Page<TravelOrderVo> queryOrderPage(int pageNum, int pageSize,String userId, Map<String, Object> reqMap);

	/**
	 * 获取用户的订单分页数据
	 * @param page
	 * @param pageSize
	 * @param userId
	 * @return
	 */
	Page<TravelOrderVo> queryOrderPageByUserId(Map<String,Object> reqMap);
	/**
	  * 获取指定日期内的订单数
	  * @param userId 用户id
	  * @param startDate 起始日期
	  * @param endDate 结束日期
	  * @return innerLine:国内线路;outerLine:国外线路;scenic:景点;hotel:酒店;total:总计;xAxis:X轴
	  */
	Map<String, List<Object>> getOrderCountByDays(String userId,Date startDate, Date endDate);

	/**
	 * 第一轮审核
	 * @param travelOrder
	 */
	void examFirst(TravelOrderVo travelOrderVo);

	/**
	 * 第二轮审核
	 * @param travelOrder
	 */
	void examSecond(TravelOrder travelOrder);
	/**
	 * 按月统计订单
	 */
	Map<String,Integer> getOrderNumByMonth(String userId,Date date);
	/**
	 * 供应商验票
	 * @param supplyId
	 * @param randomCode
	 * @return
	 */
	boolean checkOrder(String orderId);
	/**
	 * 查询订单
	 * @param orderId
	 * @return
	 */
	TravelOrder queryOrderById(String orderId);
	/**
	 * 搜索待验票的订单
	 * @param reqMap checkCode:验票码或订单号，startDate:下单时间搜索的下限值，endDate:下单时间搜索的上限值
	 * @return
	 */
	List<TravelOrderVo> searchCheckOrder(Map<String, Object> reqMap);
	/**
	  * 	获取订待审核订单单分页信息
	  * @param reqMap reqMap中的key:goodsId线路/景点/酒店id;userId 下单人id;status 0未付款，1已付款/未出行，3已出行，4退款;
	  * @return
	  */
	Page<TravelOrderVo> queryExamOrderByPage(Integer page, Integer pageSize, String userId, Map<String, Object> reqMap);
	 /**
	  * 财务管理获取订单分页数据
	  * @param reqMap
	  * @return
	  */
	Page<TravelOrderVo> queryFinanceOrderByPage(Integer page, Integer pageSize, Map<String, Object> reqMap);

	/**
	 * 获取分销订单列表
	 * @param page
	 * @param pageSize
	 * @param map
	 * @return
	 */
	Page<TravelOrderVo> getDistrOrderList(Integer page, Integer pageSize, Map<String, Object> map);
}
